//
//  锁.h
//  面试题
//
//  Created by Toj on 8/23/21.
//

// https://www.jianshu.com/p/256f555cf7b5
临时区：
   指的是一块对公共资源进行访问的代码，并非一种机制或是算法。

#pragma mark - 问题
1. 锁的种类
2. 锁能干什么
3. 锁的优缺点
4. 什么场景用到各个锁

#pragma mark - 锁的种类
// 性能从高到低排序
OSSpinLock: 不安全的锁
dispatch_semaphore // 信号锁, 安全, 推荐使用
pthread_mutex      // 优点：跨平台 互斥锁（普通锁） 推荐使用
dispatch_queue(DISPATCH_QUEUE_SERIAL)　// 同步队列锁
NSLock  // oc
NSCondition // oc
pthread_mutex(recursive) // 递归锁 也是 互斥锁
NSRecursiveLock // oc
NSConditionLock // oc
@synchronized // 同步锁 oc


os_unfair_lock // 缺点：iOS10才支持
1. 互斥锁
/Users/vipcode/Desktop/Source/Source/多线程/锁/互斥锁.h
2. 自旋锁
/Users/vipcode/Desktop/Source/Source/多线程/锁/自旋锁.h


#pragma mark - 3. 锁的优缺点
可能带来 死锁 隐患,
1. OSSpinLock苹果已经不推荐使用就是造成死锁的情况, 详情请看【自旋锁.h】
2. 主线程中, 同步线程加入串行队列中也会造成死锁,
主线程 等待 同步线程, 同步线程 等待 主线程, 2者海枯石烂等下去.

